/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package GUI;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;


/**
 *
 * @author Jaime
 */
public class Vista extends JFrame {

    /**
	 * Layout de las busquedas
	 */
	BorderLayout layout;
	/**
	 * Grupo de botones para aceptar y cancelar
	 */
	ButtonGroup botones;

	/**
	 * Botones de aceptar y cancelar
	 */
	JButton aceptar, cancelar;

	/**
	 * Paneles de la ventana de busquedas
	 */
	JPanel panelBusquedas,panelBotones,panelCiclos;

	/**
	 * Grupo de botones para las opciones de busquedas
	 */
	ButtonGroup opciones;

	/**
	 * Bototones de selecci�n de b�squeda
	 */
	JRadioButton anchura,profundidad,uniforme,iterativa,
					limitada,voraz,aEstrella,escaladaSimple,
					escaladaMaxPend,enfriamiento;

	/**
	 * Casilla de elecci�n de control de ciclos
	 */
	JCheckBox botonCiclos;

	/**
	 * Etiquetas para las busquedas ciegas e informadas
	 */
	JLabel ciegas, informadas;

	/**
	 * Dialogo de peticion de búsquedas
	 */
	JDialog busquedas;


	/**
	 * Valor devuelto en la busqueda
	 */
	int valorDevuelto;

	/**
	 * Para saber si hay control de ciclos
	 */
	boolean controlCiclos;


    	public Vista(){

		/*this.setTitle("Micromundo");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//calcular constantes y localizacion
        this.setSize(400,400);
		this.setLocation(Constantes.getAnchoPantalla()-400,Constantes.getLargoPantalla()-400);
		this.setVisible(true);*/

	}

    	public int lanzaVentanaBusquedas(){
		valorDevuelto = -1;
		layout = new BorderLayout();
		busquedas = new JDialog(this,"Elección Búsqueda",true);
       	busquedas.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
		busquedas.setLayout(layout);
		creaBusquedas();
		anadeBusquedas();
		creaBotones();
		anadeBotones();
		busquedas.setAlwaysOnTop(false);
        asignaAccion();
        busquedas.setAlwaysOnTop(false);
        busquedas.setLocation(Constantes.getAnchoPantalla()-300,0);
		busquedas.setSize(300,375);
		busquedas.setAlwaysOnTop(false);
		busquedas.setVisible(true);

        busquedas.setAlwaysOnTop(false);
		return valorDevuelto;
		//return opciones.getSelection().getMnemonic();
	}


	

   private void creaBusquedas(){
		opciones = new ButtonGroup();
		ciegas = new JLabel("Búsqueda Ciega");
		informadas = new JLabel("Búsqueda Informada");
		anchura = new JRadioButton("Primero Anchura");
		profundidad = new JRadioButton("Primero Profundidad");
		uniforme = new JRadioButton("Coste Uniforme");
		iterativa = new JRadioButton("Profundización iterativa");
		limitada = new JRadioButton("Profundidad limitada");
		voraz = new JRadioButton("Voraz");
		aEstrella = new JRadioButton("A*",true);
		escaladaSimple = new JRadioButton("Escalada simple");
		escaladaMaxPend = new JRadioButton("Escalada por max.pendiente");
		enfriamiento= new JRadioButton("Enfriamiento simulado");
		botonCiclos = new JCheckBox("Control de ciclos",true);
		anchura.setMnemonic(1);
		profundidad.setMnemonic(2);
		uniforme.setMnemonic(3);
		iterativa.setMnemonic(4);
		limitada.setMnemonic(5);
		voraz.setMnemonic(6);
		aEstrella.setMnemonic(7);
		escaladaSimple.setMnemonic(8);
		escaladaMaxPend.setMnemonic(9);
		enfriamiento.setMnemonic(10);

	}

  	private void anadeBusquedas(){
		opciones.add(anchura);
		opciones.add(profundidad);
		opciones.add(uniforme);
		opciones.add(iterativa);
		opciones.add(limitada);
		opciones.add(voraz);
		opciones.add(aEstrella);
		opciones.add(escaladaSimple);
		opciones.add(escaladaMaxPend);
		opciones.add(enfriamiento);
		panelBusquedas = new JPanel();
		panelCiclos = new JPanel();
		panelBusquedas.setLayout(new GridLayout(6,6));
		panelBusquedas.add(ciegas);
		panelBusquedas.add(informadas);
		panelBusquedas.add(anchura);
		panelBusquedas.add(voraz);
		panelBusquedas.add(profundidad);
		panelBusquedas.add(aEstrella);
		panelBusquedas.add(uniforme);
		panelBusquedas.add(escaladaSimple);
		panelBusquedas.add(iterativa);
		panelBusquedas.add(escaladaMaxPend);
		panelBusquedas.add(limitada);
		panelBusquedas.add(enfriamiento);
		panelCiclos.add(botonCiclos);
		busquedas.add(panelBusquedas,BorderLayout.NORTH);
		busquedas.add(panelCiclos,BorderLayout.CENTER);

	}
    private void creaBotones(){
		botones = new ButtonGroup();
		aceptar = new JButton("Aceptar");
		cancelar = new JButton("Cancelar");
	}
    private void anadeBotones(){
		botones.add(aceptar);
		botones.add(cancelar);
		panelBotones = new JPanel();
		panelBotones.add(aceptar);
		panelBotones.add(cancelar);
		busquedas.add(panelBotones,BorderLayout.SOUTH);
	}

   	private void asignaAccion(){
		aceptar.addActionListener(new OyenteAceptar());
		cancelar.addActionListener(new OyenteCancelar());
	}



  	class OyenteAceptar implements ActionListener{

		public void actionPerformed(ActionEvent evento) {

    		valorDevuelto = opciones.getSelection().getMnemonic();
			controlCiclos = botonCiclos.isSelected();
			busquedas.setVisible(false);
	
		}

	}


	public int preguntaProfundidad(){
		int profundidad = -1;
		while (profundidad < 0){
			try{
				profundidad = Integer.parseInt(JOptionPane.showInputDialog(busquedas,"Limite profundidad"));
			}catch(NumberFormatException nfe){
				profundidad = -1;
			}
			if (profundidad < 0){
				error("Introduzca un limite válido");
			}
		}
		return profundidad;
	}


	class OyenteCancelar implements ActionListener{

		public void actionPerformed(ActionEvent evento) {
			valorDevuelto = -1;
			error("Introduzca algún tipo de búsqueda");
		}

	}


	public boolean isControlCiclos() {
		return controlCiclos;
	}


	private void error(String mensaje){
		JOptionPane.showMessageDialog(busquedas,mensaje,"Error",
				JOptionPane.ERROR_MESSAGE);
	}

	public int pideTemperatura(){
		int temperatura = -1;
		while (temperatura < 0){
			try{
				temperatura = Integer.parseInt(JOptionPane.showInputDialog(busquedas,"Temperatura"));
			}catch(NumberFormatException nfe){
				temperatura = -1;
			}
			if (temperatura < 0){
				error("Introduzca una temperatura válida");
			}
		}
		return temperatura;
	}


	public int pideEnfriamiento(){
		int enfriamiento = -1;
		while (enfriamiento < 0){
			try{
				enfriamiento = Integer.parseInt(JOptionPane.showInputDialog(busquedas,"Enfriamiento"));
			}catch(NumberFormatException nfe){
				enfriamiento = -1;
			}
			if (enfriamiento < 0){
				error("Introduzca un enfriamiento válido");
			}
		}
		return enfriamiento;
	}




}
